package essential.ch3;

/**
 * @Date 2021/10/23
 * @Created by Jonathan
 */
public class StringTest2 {
    public static void main(String[] args) {
        final String fs = "Java";
        String s = "Java";
        int i = 7;
        final int fi = 7;
        String s1 = "JavaSE7";
        String s2 = "Java" + "SE" + "7";
        String s3 = fs + "SE" + "7";
        /**
         * 由于s不是final的，因此s指向的String对象在编译期间不能确定，
         * 虽然在程序中指向“Java”，但是没有人能够保证s
         * 所指向的地址不会改变（即不会指向其他的String对象）
         * 所以该表达式也不是常量表达式
         */
        String s4 = s + "SE" + "7";
        String s5 = fs + "SE" + "7";
        String s6 = fs + "SE" + fi;
        /**
         * s7指向的String对象也在运行期间才能确定（在运行时创建的String对象会分配到堆中）
         */
        String s7 = fs + "SE" + i;
        System.out.printf("s1==s2:%s\n", s1 == s2);
        System.out.printf("s1==s3:%s\n", s1 == s3);
        System.out.printf("s1==s4:%s\n", s1 == s4);
        System.out.printf("s1==s5:%s\n", s1 == s5);
        System.out.printf("s1==s6:%s\n", s1 == s6);
        System.out.printf("s1==s7:%s\n", s1 == s7);
    }
}
